package com.zrrd.learn.framework.mybatis.mybatisinterface.mapper;

;
import com.zrrd.learn.framework.mybatis.mybatisinterface.entity.StudentEntity;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.io.Serializable;
import java.util.List;
import java.util.Map;

/**
 * @author wrn
 * @version 1.0
 * @date 2023/9/1 11:12
 */

public interface StudentMapper {

    /**
     * 通过名称查询一个人的信息
     * @param stu_name  学生姓名
     * @return
     */
    @Select("select * from student where stu_name = #{stu_name}")
    StudentEntity findOneByName(@Param("stu_name") String stu_name);

    /**
     * 查询Student表里面的全部数据
     * mybatis ： 解析 哪一个类里面有 @select这个的注解
     *
     * 如果有注解 ，通过代理模式 自动生成一个当前接口的实现类.
     *
     * mybatis 内部类里面帮你通过 解析  xml拿到数据源
     * 帮你通过connection 执行 @select里面的sql语句，并将返回结果
     * 通过 resultsethandle 类的把结果封装成  List<Map<String, Object>>
     */
    @Select("select * from student")
    List<Map<String, Object>> showAll();

    @Select("select * from student")
    List<StudentEntity> showAllWithEntity();

    @Update("update student set id=#{se.id},stu_name=#{se.stu_name}," +
            " stu_sex=#{se.stu_sex},classno=#{se.classno},xueli=#{se.xueli},mgr=#{se.mgr} where id = #{oldid}")
    int updateStudent(@Param("se") StudentEntity se,@Param("oldid") int oldid);


    @Select("select * from student where id = #{id}")
    StudentEntity findOneById(@Param("id") int id);

    // 有一个没有任何实际意义的对破坏性操作 ()...mysql
    // 内存 right 线程死锁(机乎为零) innoDB   完整事务  acid ) mysql innodb update insert delete (悲观锁)
    // 慢了  mysql压力

    /**
     * 添加方法
     * arguments  参数  0
     * parameter  参数  1
     *
     * 都不用
     * mybatis 参数注解绑定功能
     * @ 可以以写在参数上面
     *
     * @return 1
     */
//    @Insert("insert into student(`stu_name`,`stu_sex`,`xueli`) values (#{stu_name},#{stu_sex},#{xueli})")
//    int addStudent(@Param("stu_name") String stu_name, @Param("stu_sex")String stu_sex, @Param("xueli")String xueli);
//    分层结构 有哪些常用包，，名称叫  作用是什么 ，存储哪种java类
    //controller  :  控制层 让前台与后台连接包
    //service     :  业务逻辑处理包  调用多个mapper里面的方法
    //mapper      : sql(二个方法)

    //entity      : pojo (实体类包)
    //util        : 工具包
    //common      ： 通用类
    //config      : 配置类 （xml）
    //domain
    //vo
    //bo
    //po


//    @Update()
    int updateStudent();

    int addStudent(String stu_name, String stu_sex, String xueli);
}